From 849d58c0c23c41b275f4db7acb2a78779ae368c6 Mon Sep 17 00:00:00 2001 From: "cl349@firebug.cl.cam.ac.uk" Date: Mon, 12 Sep 2005 20:46:37 +0000 Subject: [PATCH] Add xenstore-list and xenstore-exists clients Signed-off-by: Christian Limpach --- tools/xenstore/Makefile | 3 ++- tools/xenstore/xenstore_client.c | 36 +++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/tools/xenstore/Makefile b/tools/xenstore/Makefile index 82c64dfc6f..94a4f41381 100644 --- a/tools/xenstore/Makefile +++ b/tools/xenstore/Makefile @@ -25,7 +25,8 @@ TESTDIR = `pwd`/testsuite/tmp TESTFLAGS= -DTESTING TESTENV = XENSTORED_ROOTDIR=$(TESTDIR) XENSTORED_RUNDIR=$(TESTDIR) -CLIENTS := xenstore-read xenstore-rm xenstore-write +CLIENTS := xenstore-exists xenstore-list xenstore-read xenstore-rm +CLIENTS += xenstore-write CLIENTS_OBJS := $(patsubst xenstore-%,xenstore_%.o,$(CLIENTS)) all: libxenstore.so xenstored $(CLIENTS) diff --git a/tools/xenstore/xenstore_client.c b/tools/xenstore/xenstore_client.c index 842aca33fe..50a774d296 100644 --- a/tools/xenstore/xenstore_client.c +++ b/tools/xenstore/xenstore_client.c @@ -22,7 +22,7 @@ usage(const char *progname) errx(1, "Usage: %s [-h] [-p] key [...]", progname); #elif defined(CLIENT_write) errx(1, "Usage: %s [-h] key value [...]", progname); -#elif defined(CLIENT_rm) +#elif defined(CLIENT_rm) || defined(CLIENT_exists) || defined(CLIENT_list) errx(1, "Usage: %s [-h] key [...]", progname); #endif } @@ -33,8 +33,7 @@ main(int argc, char **argv) struct xs_handle *xsh; bool success; int ret = 0; -#if defined(CLIENT_read) - char *val; +#if defined(CLIENT_read) || defined(CLIENT_list) int prefix = 0; #endif @@ -46,14 +45,14 @@ main(int argc, char **argv) int c, index = 0; static struct option long_options[] = { {"help", 0, 0, 'h'}, -#if defined(CLIENT_read) +#if defined(CLIENT_read) || defined(CLIENT_list) {"prefix", 0, 0, 'p'}, #endif {0, 0, 0, 0} }; c = getopt_long(argc, argv, "h" -#if defined(CLIENT_read) +#if defined(CLIENT_read) || defined(CLIENT_list) "p" #endif , long_options, &index); @@ -64,7 +63,7 @@ main(int argc, char **argv) case 'h': usage(argv[0]); /* NOTREACHED */ -#if defined(CLIENT_read) +#if defined(CLIENT_read) || defined(CLIENT_list) case 'p': prefix = 1; break; @@ -90,7 +89,7 @@ main(int argc, char **argv) while (optind < argc) { #if defined(CLIENT_read) - val = xs_read(xsh, argv[optind], NULL); + char *val = xs_read(xsh, argv[optind], NULL); if (val == NULL) { warnx("couldn't read path %s", argv[optind]); ret = 1; @@ -118,6 +117,29 @@ main(int argc, char **argv) goto out; } optind++; +#elif defined(CLIENT_exists) + char *val = xs_read(xsh, argv[optind], NULL); + if (val == NULL) { + ret = 1; + goto out; + } + free(val); + optind++; +#elif defined(CLIENT_list) + unsigned int i, num; + char **list = xs_directory(xsh, argv[optind], &num); + if (list == NULL) { + warnx("could not list path %s", argv[optind]); + ret = 1; + goto out; + } + for (i = 0; i < num; i++) { + if (prefix) + printf("%s/", argv[optind]); + printf("%s\n", list[i]); + } + free(list); + optind++; #endif } -- 2.30.2